#include "INC.h"


#define UART_DEBUG_BUFFER_SIZE 50

//extern variables
// extern Action_t action;
// USER UART VARIABLES
char coding_data[UART_DEBUG_BUFFER_SIZE];
uint8_t coding_data_cnt = 0;

// void parse_coding_data(char* coding_data,
//                        Action_t* action) {
//     // 本地拷贝并确保终止
//     char buffer[UART_DEBUG_BUFFER_SIZE];
//     strncpy(buffer, coding_data, sizeof(buffer));
//     buffer[sizeof(buffer) - 1] = '\0';

//     // 按逗号和分号分割命令
//     char* token = strtok(buffer, ",;");
//     while (token != NULL) {
//         // 去除前后空白
//         while (isspace((unsigned char)*token)) token++;
//         char* end = token + strlen(token) - 1;
//         while (end > token && isspace((unsigned char)*end)) end--;
//         *(end + 1) = '\0';

//         // 提取命令和数值
//         char cmd[8];
//         int val = 0;
//         if (sscanf(token, "%7[^ (](%d)", cmd, &val) == 2) {
//             if (strcmp(cmd, "l_pwm") == 0 ) {
//                 action->l_pwm = val;
//             }else if (strcmp(cmd, "r_pwm") == 0) {
//                 action->r_pwm = val;
//             } else if (strcmp(cmd, "s_angle") == 0) {
//                 action->servo_angle = (float)val; 
//             }

//         }
//         token = strtok(NULL, ",;");
//     }
// }
// UART DEBUG HANDLER
void UART_DEBUG_INST_IRQHandler(void) {
    uint8_t data = DL_UART_Main_receiveData(UART_DEBUG_INST);
    DL_UART_transmitDataBlocking(UART_DEBUG_INST, data);
    // 累积数据字节
    if (coding_data_cnt < UART_DEBUG_BUFFER_SIZE - 1) {
        coding_data[coding_data_cnt++] = data;
    } else {
        // 缓冲区溢出，丢弃当前帧
        coding_data_cnt = 0;
        return;
    }

    // 遇到帧结束符 ';'，处理整帧
    if (data == ';') {
        // 在分号处写入终止符，形成合法 C 字符串
        coding_data[coding_data_cnt - 1] = '\0';
        // 重置缓冲区索引，准备下一帧
        coding_data_cnt = 0;
        //解析数据
        // parse_coding_data(coding_data,&action);
        // set_action(&action);
    }
}

void Uart_Debug_NVIC_init(void){
    NVIC_EnableIRQ(UART_DEBUG_INST_INT_IRQN);
}

void Uart_Debug_transmitString(const char* str) {
    while (*str) {
        DL_UART_transmitDataBlocking(UART_DEBUG_INST, (uint8_t)(*str));
        str++;
    }
}